package Day13;

public class Day13_Z {
    public static void main(String[] args) {
        //String内容修改
        //StringBuilder
        // 加法操作拼接字符串时，Java编译器会自动优化，使用StringBuilder（或StringBuffer）内部实现
// 这里直接使用字符串连接操作符"+"是高效的，编译器会处理底层的StringBuilder操作
String str1 = "abc";
String str2 = "abc" + "def"; // 直接这样拼接是高效的，不会每次都创建新对象

// 然而，如果你在循环或其他动态拼接场景中，显式使用StringBuilder会更高效
// 因为避免了不必要的对象创建
str2 = new StringBuilder(str1).append("def").toString(); // 这种方式适用于需要多次拼接的情况


        //StringBuffer(先出现)
        //线程安全 可以串行化 并发处理 性能稍慢
        //多线程适用StringBuffer

        //StringBuilder(后出现)
        //程不安全 不可以并发处理 性能稍快
        //单线程适用StringBuilder


        //正则表达式 一串特定的字符串 组成了一个"规则字符串"
        //表达一个字符串内容的规则的
        //只考虑格式规则(例如手机号的位数) 不考虑有效性(返回验证码确保是否可用)
        //基础语法
        //[]在正则表达式中只表示一个字符
        //[abc]a或b或c 只能写一个字符
        //[^abc]不允许出现a,b,c
        //[a-z]表示a到z的任意一个字符
        //[a-zA-Z0-9]表示a到z或者A到Z或者0到9的任意一个字符

        //预定义字符
        //.任意一个字符
        //\d表示任意一个数字 可以写0-9也可以写\d
        //\w表示任意一个字母或者数字或者下划线
        //\s表示任意一个空白字符 空格 缩进 回车 制表符等
        //\D表示任意一个非数字
        //\W表示任意一个非字母或者非数字或者非下划线
        //\S表示任意一个非空白字符

        //量词
        //X?表示X出现0次或1次
        //X*表示X出现0次或多次 可以一个都不写 例如[abc]*
        //X+表示X出现1次或多次 至少要写一个 例如[abc]+ (+加号只管前面一个字符串)
        //X{n}表示X出现n次 必须出现n次 例如[abc]{2}
        //X{n,}表示X出现n次或多次 表示至少出现n次 没有上限
        //X{n,m}表示X出现n到m次 表示至少出现n次 至多出现m次
           //若要表示最多出现m次 可以写X{0,m} 因为下限是确定的 所以可以省略

        //分组
        //(X)表示X是一个分组 可以使用 | 表示关系"或者"
           //例如 (abc|def)表示abc或者def

        //邮箱
        //用户名(数字 字母 下划线 至少一个字符以上) [a-zA-Z0-9_]+
        //@ @表示必须出现@字符
        //域名(字母 数字 至少一个字符以上) [a-zA-Z0-9]+
        //后缀(.com或.cn或.org或.net或.edu或可以自己申请 ("."+一次以上的字母)组合1次以上) (\.[a-zA-Z]+)+
           //后缀正则表达式第二次出现的+表示前面()内的内容至少出现1次 而()表示形成一个分组
        //最终表示为[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+
        //正则表达式中不能随意出现空格 否则会报错

        //matches(String regex)方法 参数为正则表达式 返回boolean 用于判断
        //split(String regex)方法 参数为正则表达式 返回String[] 用于分割 不会保留被切割的部分 保留部分为数组形式


        //Object
        //在java类继承结构中 java.lang.Object是所有类的父类
        //若没有明确说明继承哪个类 默认继承Object

        //java是面向对象的编程语言 封装 继承 多态
        //多态
        //先有子类 后有父类 先有具体的实例对象 后为归类才有了父类 作用可以笼统理解为归类

        //equals(Object obj)方法 参数为Object类型 返回boolean 用于判断
        //Object中的方法 作用在于判断两个对象是否相等 特征是否一致 不关心是否为同一个(类似于像不像)
        //equals比较 true-------==比较不一定一样(==比较的是是否为同一个对象)
        //注意 要使用此方法时要重写equals方法 若不重写 表达的意思与==是一样的

        //CTRL alt l 格式化 可以使注释对齐


        //包装类概述
        //基本类型没法直接参与面向对象开发 所以需要使用包装类 让基本类型以对象的形式存在










    }
}
